// for class based (OO) access to veh functions

#pragma once
#include <windows.h>

#include "../../ScriptHook/ScriptingTypes.h"
#include "../../ScriptHook/Scripting.h"
#include "../ScriptingTypes.h"
#include "../ScriptingEnums.h"
#include "../Log.h"
#include "GameObject.h"

namespace GTA
{
	public ref class Vehicle : GameObject
	{

	private:
	public:
		Vehicle::Vehicle();
		Vehicle::Vehicle(u32 handle);
		Vehicle::Vehicle(Scripting::Vehicle veh);
		
		property Scripting::Vehicle Base
		{
			Scripting::Vehicle get();
			void set(Scripting::Vehicle veh);
		}

		virtual property GTA::Vector3^ Vehicle::Coordinates
		{
			GTA::Vector3^ get() override;
			void set(GTA::Vector3^ pos) override;
		}

		virtual property GTA::Quaternion^ Vehicle::Quaternion
		{
			GTA::Quaternion^ get() override;
			void set(GTA::Quaternion^ pos) override;
		}

		virtual property f32 Heading
		{
			f32 get() override;
			void set(f32 heading) override;
		};

		property u32 Health
		{
			u32 get();
			void set(u32 health);
		};

		property GTA::eModel Model
		{
			GTA::eModel get();
		};
		
		virtual bool Exists() override;
		static bool Exists(Vehicle^ veh);
	};
};